From: Jeroen van der Heijden Date: Thu, 10 Sep 2020 16:40:14 +0000 (+0200) Subject: Work on shard listing X-Git-Tag: archive/raspbian/2.0.44-1+rpi1~1^2~3^2~2^2~14^2~5 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=eb9e0739cb2103a34e5c7012d67fb0d664050e2f;p=siridb-server.git Work on shard listing --- diff --git a/include/omap/omap.h b/include/omap/omap.h index 7b5d5fd9..3b70ecf6 100644 --- a/include/omap/omap.h +++ b/include/omap/omap.h @@ -36,10 +36,9 @@ uint64_t * omap_last_id(omap_t * omap); void * omap_rm(omap_t * omap, uint64_t id); static inline omap_iter_t omap_iter(omap_t * omap); static inline uint64_t omap_iter_id(omap_iter_t iter); -#define omap_each(iter__, dt__, var__) \ - dt__ * var__; \ - iter__ && \ - (var__ = (dt__ *) iter__->data_); \ +#define omap_loop(iter__, var__) \ + ;iter__ && \ + (var__ = iter__->data_); \ iter__ = iter__->next_ struct omap_s diff --git a/include/siri/db/shards.h b/include/siri/db/shards.h index ed7c64c3..0d66147e 100644 --- a/include/siri/db/shards.h +++ b/include/siri/db/shards.h @@ -30,5 +30,7 @@ double siridb_shards_count_percent( siridb_t * siridb, uint64_t end_ts, uint8_t tp); +size_t siridb_shards_n(siridb_t * siridb); +vec_t * siridb_shards_vec(siridb_t * siridb); #endif /* SIRIDB_SHARDS_H_ */ diff --git a/src/siri/db/listener.c b/src/siri/db/listener.c index 59386091..693ca008 100644 --- a/src/siri/db/listener.c +++ b/src/siri/db/listener.c @@ -2972,7 +2972,7 @@ static void exit_drop_shards(uv_async_t * handle) } double percent = (double) - q_drop->shards_list->len / siridb->shards->len; + q_drop->shards_list->len / siridb_shards_n(siridb); if (IS_MASTER && q_drop->shards_list->len && diff --git a/src/siri/db/shards.c b/src/siri/db/shards.c index 5fd4ae17..784a5062 100644 --- a/src/siri/db/shards.c +++ b/src/siri/db/shards.c @@ -328,6 +328,43 @@ int siridb_shards_add_points( return siri_err; } +static inline int SHARDS_count_cb(omap_t * omap, size_t * n) +{ + *n += omap->n; + return 0; +} + +size_t siridb_shards_n(siridb_t * siridb) +{ + size_t n = 0; + imap_walk(siridb->shards, (imap_cb) SHARDS_count_cb, &n); + return n; +} + +static inline int SHARDS_to_vec_cb(omap_t * omap, vec_t * v) +{ + omap_iter_t iter = omap_iter(omap); + siridb_shard_t * shard; + for (;iter && (shard = iter->data_); iter = iter->next_) + { + vec_append(v, shard); + ++shard->ref; + } + return 0; +} + +vec_t * siridb_shards_vec(siridb_t * siridb) +{ + size_t n = siridb_shards_n(siridb); + vec_t * vec = vec_new(n); + if (vec == NULL) + { + return NULL; + } + imap_walk(siridb->shards, (imap_cb) SHARDS_to_vec_cb, &n); + return vec; +} + double siridb_shards_count_percent( siridb_t * siridb, uint64_t end_ts, diff --git a/src/siri/optimize.c b/src/siri/optimize.c index b9fb1ccc..f1b48a65 100644 --- a/src/siri/optimize.c +++ b/src/siri/optimize.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -300,7 +301,7 @@ static void OPTIMIZE_work(uv_work_t * work __attribute__((unused))) uv_mutex_lock(&siridb->shards_mutex); - slshards = imap_2vec_ref(siridb->shards); + slshards = siridb_shards_vec(siridb); uv_mutex_unlock(&siridb->shards_mutex);